// 抽象类 Animal  
abstract class Animal {  
    // 抽象方法，用于返回动物的叫声  
    public abstract void cry();  
      
    // 抽象方法，用于返回动物的名称  
    public abstract String getAnimalName();  
}  
  
// Dog 类，继承自 Animal  
class Dog extends Animal {  
    @Override  
    public void cry() {  
        System.out.println("Woof! Woof!");  
    }  
  
    @Override  
    public String getAnimalName() {  
        return "Dog";  
    }  
}  
  
// Cat 类，继承自 Animal  
class Cat extends Animal {  
    @Override  
    public void cry() {  
        System.out.println("Meow! Meow!");  
    }  
  
    @Override  
    public String getAnimalName() {  
        return "Cat";  
    }  
}  
  
// 模拟器类 Simulator  
class Simulator {  
    // 播放动物声音并显示动物名称  
    public void playSound(Animal animal) {  
        System.out.println("Animal: " + animal.getAnimalName());  
        animal.cry();  
    }  
}  
  
// 测试类  
public class AnimalSoundSimulator {  
    public static void main(String[] args) {  
        Simulator simulator = new Simulator();  
          
        // 创建一个 Dog 对象并播放声音  
        Animal dog = new Dog();  
        simulator.playSound(dog);  
          
        // 创建一个 Cat 对象并播放声音  
        Animal cat = new Cat();  
        simulator.playSound(cat);  
    }  
}